{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from tensorflow.keras import datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Softmax(object):\n",
    "    \n",
    "    def __init__(self, epsilon=1e-12):\n",
    "\n",
    "        self.parameters = {}\n",
    "        self.epsilon = epsilon\n",
    "\n",
    "    def forward(self, x):\n",
    "        '''\n",
    "        x : (batch_size, feature_size)\n",
    "        '''\n",
    "        t = x.max(axis=1).reshape(x.shape[0], 1)\n",
    "        x -= t\n",
    "        temp = np.exp(x)\n",
    "        self.parameters[\"x\"] = temp / (temp.sum(axis=1).reshape(temp.shape[0], 1) + self.epsilon)\n",
    "        return self.parameters[\"x\"]\n",
    "\n",
    "    def backward(self, grad):\n",
    "        s = self.parameters['x']\n",
    "        sisj = np.matmul(np.expand_dims(s, axis=2), np.expand_dims(s, axis=1))\n",
    "        g_y_exp = np.expand_dims(grad, axis=1)\n",
    "        tmp = np.matmul(g_y_exp, sisj)\n",
    "        tmp = np.squeeze(tmp, axis=1)\n",
    "        return -tmp + grad * s\n",
    "\n",
    "    def __call__(self, x):\n",
    "        return self.forward(x)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "class CrossEntropy(object):\n",
    "    \n",
    "    def __init__(self, epsilon=1e-12):\n",
    "        self.epsilon = epsilon\n",
    "        self.parameters = {}\n",
    "\n",
    "    def forward(self, x, labels):\n",
    "        '''\n",
    "        x : (bathc_size, feature_size)\n",
    "        labels : (batch_size, feature_size)\n",
    "        '''\n",
    "        self.parameters[\"x\"] = x\n",
    "        self.parameters['labels'] = labels\n",
    "        lg = -np.log(x)\n",
    "        return np.mean(np.sum(lg * labels, axis=1))\n",
    "        \n",
    "\n",
    "    def backward(self):\n",
    "\n",
    "        return - 1 / (self.parameters[\"x\"] + self.epsilon) * self.parameters['labels']\n",
    "\n",
    "    def __call__(self, x, labels):\n",
    "        return self.forward(x, labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "class ReLu(object):\n",
    "    \n",
    "    def __init__(self):\n",
    "        \n",
    "        self.parameters = {}\n",
    "\n",
    "    def forward(self, x):\n",
    "        self.parameters[\"x\"] = x\n",
    "        x[x < 0] = 0\n",
    "        return x\n",
    "\n",
    "    def backward(self, grad):\n",
    "        data = np.where(self.parameters['x'] > 0, 1, self.parameters['x'])\n",
    "        return data * grad\n",
    "    \n",
    "    def __call__(self, x):\n",
    "        return self.forward(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Linear(object):\n",
    "    \n",
    "    def __init__(self, input_size, output_size, learning_rate=1e-3):\n",
    "        \n",
    "        self.input_size = input_size\n",
    "        self.output_size = output_size\n",
    "        self.learning_rate = learning_rate\n",
    "        self.parameters = {\n",
    "            \"W\": np.random.normal(size=(input_size, output_size))\n",
    "        }\n",
    "\n",
    "    def forward(self, x):\n",
    "        '''\n",
    "        x : (batch_size, feature_size)\n",
    "        '''\n",
    "        self.parameters[\"x\"] = x\n",
    "        return np.dot(x, self.parameters[\"W\"])\n",
    "\n",
    "    def backward(self, grad):\n",
    "        self.parameters[\"W\"] -= self.learning_rate * np.dot(self.parameters[\"x\"].T, grad)\n",
    "        return np.dot(grad, self.parameters[\"W\"].T)\n",
    "\n",
    "    def __call__(self, x):\n",
    "        return self.forward(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "class PictureModel(object):\n",
    "    \n",
    "    def __init__(self, input_size, output_size, learning_rate):\n",
    "        \n",
    "        self.fc1 = Linear(input_size=input_size, output_size=output_size, \n",
    "                                                  learning_rate=learning_rate)\n",
    "        self.act = ReLu()\n",
    "        self.fc2 = Linear(input_size=output_size, output_size=10, \n",
    "                                                  learning_rate=learning_rate)\n",
    "        self.softmax = Softmax()\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = self.fc1(x)\n",
    "        out = self.act(out)\n",
    "        out = self.fc2(out)\n",
    "        return self.softmax(out)\n",
    "\n",
    "    def __call__(self, x):\n",
    "        return self.forward(x)\n",
    "\n",
    "    def backward(self, x, labels):\n",
    "        criterion = CrossEntropy()\n",
    "        out = criterion(x, labels)\n",
    "        grad = criterion.backward()\n",
    "        grad = self.softmax.backward(grad)\n",
    "        grad = self.fc2.backward(grad)\n",
    "        grad = self.act.backward(grad)\n",
    "        grad = self.fc1.backward(grad)\n",
    "        return out\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_model = PictureModel(784, 100, learning_rate=1e-5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "def score(labels, predict):\n",
    "    predict = predict.argmax(axis=1)\n",
    "    return sum(labels == predict) / len(predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "(train_dataset, train_label), (test_dataset, test_label) = datasets.mnist.load_data()\n",
    "train_dataset = train_dataset.reshape(train_dataset.shape[0], -1)\n",
    "test_dataset = test_dataset.reshape(test_dataset.shape[0], -1)\n",
    "train_dataset = train_dataset / 255"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_model.fc1.learning_rate = 1e-5\n",
    "my_model.fc2.learning_rate = 1e-5\n",
    "average_loss = []\n",
    "average_acc = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "batch_size = 64\n",
    "epoch = 300\n",
    "for e in range(epoch):\n",
    "    avg_loss = 0\n",
    "    avg_acc = 0\n",
    "    for i in range(0, len(train_dataset) // batch_size):\n",
    "        out = my_model(train_dataset[i * batch_size:(i + 1) * batch_size])\n",
    "        labels = np.zeros((batch_size, 10))\n",
    "        for j in range(batch_size):\n",
    "            labels[j, train_label[i * batch_size + j].item()] = 1\n",
    "        loss = my_model.backward(out, labels)\n",
    "        if i % 1000 == 0:\n",
    "            if i == 0:\n",
    "                avg_loss = loss\n",
    "                avg_acc = score(test_label, predicts)\n",
    "            else:\n",
    "                avg_loss += loss\n",
    "                avg_acc += score(test_label, predicts)\n",
    "                avg_loss /= 2\n",
    "                avg_acc /= 2\n",
    "            predicts = my_model(test_dataset)\n",
    "            print(loss, avg_acc)\n",
    "    average_acc.append(avg_acc)\n",
    "    average_loss.append(avg_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "average_loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "sns.set()\n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams['figure.dpi'] = 100 #分辨率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'pure numpy + Gradient Descent optimizer : accuarcy graph')"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax2 = sns.lineplot(x = np.arange(0, len(average_loss[1:]), 1),\n",
    "             y = average_acc[1:], label=\"accuarcy on test set\")\n",
    "ax2.set_xlabel(\"epoch\")\n",
    "ax2.set_ylabel(\"accuarcy\")\n",
    "ax2.set_title(\"pure numpy + Gradient Descent optimizer : accuarcy graph\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'pure numpy + Gradient Descent optimizer : loss graph')"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax2 = sns.lineplot(x = np.arange(0, len(average_loss[1:]), 1),\n",
    "             y = average_loss[1:], label=\"accuarcy on test set\")\n",
    "ax2.set_xlabel(\"epoch\")\n",
    "ax2.set_ylabel(\"loss\")\n",
    "ax2.set_title(\"pure numpy + Gradient Descent optimizer : loss graph\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
